home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / edit / aurora2.zip / ENTAB.AML < prev    next >
Text File  |  1995-01-26  |  3KB  |  114 lines

  1.  
  2. // ───────────────────────────────────────────────────────────────────
  3. // The Aurora Editor v2.0
  4. // Copyright 1993-1995 nuText Systems. All Rights Reserved Worldwide.
  5. //
  6. // Entab macro (does not used builtin entab, can be customized)
  7. //
  8. // Converts spaces to tabs in the current file. The conversion is
  9. // limited to a marked block if it exists in the current file. The
  10. // current value of the _TabWidth config variable is used for the
  11. // conversion.
  12. //
  13. // (Note: this macro will run faster if undo is disabled)
  14. // ───────────────────────────────────────────────────────────────────
  15.  
  16.   // compile time macros and function definitions
  17.   include  bootpath "define.aml"
  18.  
  19.   // declare variables which are referenced before
  20.   // they're assigned a value
  21.   var space_total
  22.   var tab_total
  23.   var line_total
  24.   var progress_line
  25.   var lastline
  26.  
  27.   if not objtype? "edit" then
  28.     msgbox "Edit windows only!"
  29.     return
  30.   end
  31.  
  32.   width = _TabWidth
  33.   tabchar = char 9
  34.  
  35.   // setup search string for 2 or more spaces, quote chars, and tabs
  36.   search_str = "{  #}|['\"" + tabchar + ']'
  37.   search_opt = if mark? and getmarkbuf == getcurrbuf then
  38.                  "xb"
  39.                else
  40.                  'x'
  41.                end
  42.  
  43.   // group together as one undoable operation and save cursor position
  44.   undobegin
  45.   pushcursor
  46.  
  47.   // search for 2 or more spaces, quote chars, and tabs
  48.   // using reg expressions
  49.   spaces = find search_str search_opt + "g*"
  50.  
  51.   while spaces do
  52.  
  53.     if getchar <> ' ' then
  54.  
  55.       // if the file already contains tabs, undo what's been done,
  56.       // display a message, and return
  57.       if getchar == tabchar then
  58.         popcursor
  59.         undoend
  60.         undo
  61.         msgbox "File or block already contains tabs - expand tabs first"
  62.         return
  63.  
  64.       // if quote characters are found, skip the rest of the line
  65.       else
  66.         col MAX_COL
  67.       end
  68.  
  69.     else
  70.  
  71.       if line_total then
  72.         // if this is a new line, set spaces-removed to zero
  73.         if getrow <> lastline then
  74.           line_total = 0
  75.         end
  76.       end
  77.  
  78.       // get the distance to the next tab stop
  79.       dist_to_tab = width - (getcol + line_total - 1) mod width
  80.  
  81.       // ..if greater than the number of spaces, go to next tabstop
  82.       if dist_to_tab > spaces then
  83.         right dist_to_tab
  84.  
  85.       // ..otherwise add up totals, delete spaces, and insert tabchar
  86.       else
  87.         space_total = space_total + dist_to_tab
  88.         line_total = line_total  + dist_to_tab - 1
  89.         tab_total = tab_total + 1
  90.         delchar dist_to_tab
  91.         instext tabchar
  92.         lastline = getrow
  93.  
  94.         // show progress
  95.         if lastline >= progress_line then
  96.           progress_line = progress_line + 150
  97.           say "Entab [" + lastline + ']'
  98.         end
  99.       end
  100.     end
  101.  
  102.     // repeat find
  103.     spaces = find search_str search_opt
  104.   end
  105.  
  106.   popcursor
  107.   undoend
  108.  
  109.   // display totals
  110.   msgbox  (thousands tab_total) + " tabs added, " +
  111.           (thousands space_total) + " spaces removed." "Entab"
  112.  
  113.  
  114.